package es.us.lsi.daw.servicios;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.servlet.support.RequestContextUtils;

public class MessageService {

	@Autowired
	private MessageSource	mensajes;

	/**
	 * Obtener un mensaje del fichero 'messagdinamicarea.properties'. Es necesario que la clase 'Util' se inicialize
	 * para acceder al bean 'mensajes'.
	 * 
	 * @param mensaje
	 *            Nombre del mensaje a mostrar.
	 * @return Devuelve el mensaje, o en caso de que éste no exista en el fichero 'messagdinamicarea.properties',
	 *         devuelve una cadena vacia.
	 */

	public String obtenerMensaje(String mensaje) {

		return obtenerMensaje(mensaje, null, null);
	}

	
	public String obtenerMensaje(String mensaje, Object[] args) {

		return obtenerMensaje(mensaje, args, null);
	}

	
	public String obtenerMensaje(String mensaje, Locale locale) {

		return obtenerMensaje(mensaje, null, locale);
	}

	
	/**
	 * Obtener un mensaje del fichero 'messagdinamicarea.properties'. Es necesario que la clase 'Util' se inicialize
	 * para acceder al bean 'mensajes'.
	 * 
	 * @param mensaje
	 *            Nombre del mensaje a mostrar.
	 * @param locale
	 *            Locale del que se quiere obtener el mensaje. Si es nulo, se obtiene del que está puesto actualmente
	 * @return Devuelve el mensaje, o en caso de que éste no exista en el fichero 'messagdinamicarea.properties',
	 *         devuelve una cadena vacia.
	 */

	public String obtenerMensaje(String mensaje, Object[] args, Locale locale) {

		Locale loc = locale;
		HttpServletRequest servletRequest = null;
		String result = null;

		if (RequestContextHolder.getRequestAttributes() != null) {
			servletRequest = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
			if (loc == null && servletRequest != null) {
				loc = RequestContextUtils.getLocale(servletRequest);
			}
		}
		if (mensajes == null && servletRequest != null) {
			WebApplicationContext wc = WebApplicationContextUtils.getWebApplicationContext(servletRequest.getSession().getServletContext());
			if (wc != null) {
				mensajes = (MessageSource) wc.getBean("messageSource");
			}
		}
		if (mensajes != null) {
			result = mensajes.getMessage(mensaje, args, "", loc);
		}

		return result;
	}

}
